import { useClipboard } from '@vueuse/core'
import { message } from 'ant-design-vue'

/**
 * 复制文本
 * @param {string} value 文本
 */
export function copyText(value: string) {
  const text = value
  // 添加一个input元素放置需要的文本内容
  const input = document.createElement('input')
  input.value = text
  document.body.appendChild(input)
  // 选中并复制文本到剪切板
  input.select()
  document.execCommand('copy')
  // 移除input元素
  document.body.removeChild(input)
  message.success('已复制到剪切板')
}

/** 下载文件，默认excel */
export function download(data: any, name: string, suffix = '.xlsx') {
  const blob = new Blob([data], {
    type: 'application/vnd.openxmlformats;charset=utf-8'
  })
  const href = URL.createObjectURL(blob) //创建新的URL表示指定的blob对象
  downloadLink(href, name, suffix)
}

/** 下载文件链接，默认excel */
export function downloadLink(link: string, name: string, suffix = '.xlsx') {
  const a = document.createElement('a') //创建a标签
  a.style.display = 'none'
  a.href = link // 指定下载链接
  a.download = `${name}${suffix}` //指定下载文件名
  a.click() //触发下载
  URL.revokeObjectURL(a.href)
}

/** 不指定文件名下载 */
export function downloadWithoutName(data: any, name: string) {
  download(data, name, '')
}

/** 不指定文件名下载链接 */
export function downloadLinkWithoutName(link: any, name: string) {
  downloadLink(link, name, '')
}

/** 下拉选项转Map */
export function optionsToMap(
  options: Array<{ label: string; value: any }>
): Record<string, any> {
  return options.reduce((total, cur) => {
    total[cur.value] = cur.label

    return total
  }, {})
}

/** 读取本地文件二进制 */
export function readFile(file: File) {
  return new Promise(resolve => {
    const reader = new FileReader()
    reader.readAsBinaryString(file)
    reader.onload = ev => {
      resolve(ev.target?.result)
    }
  })
}

/** 是否为空 */
export function isValueEmpty(value: any) {
  if (typeof value === 'number') {
    return !value && value != 0
  }
  if (Array.isArray(value)) {
    return value.length == 0
  }
  if (JSON.stringify(value) === '{}') {
    return true
  }
  return !value
}
